Feature detection |
---|
Output of a typical corner detection algorithm
|
Edge detection |
Canny · Canny-Deriche · Differential · Sobel · Prewitt · Roberts Cross |
Interest point detection |
Corner detection |
Harris operator · Shi and Tomasi · Level curve curvature · SUSAN · FAST |
Blob detection |
Laplacian of Gaussian (LoG) · Difference of Gaussians (DoG) · Determinant of Hessian (DoH) · Maximally stable extremal regions · PCBR |
Ridge detection |
Hough transform |
Structure tensor |
Affine invariant feature detection |
Affine shape adaptation · Harris affine · Hessian affine |
Feature description |
SIFT · SURF · GLOH · HOG · LESH |
Scale-space |
Scale-space axioms · Implementation details · Pyramids |
SURF (Speeded Up Robust Feature) is a robust image detector & descriptor, first presented by Herbert Bay et al. in 2006, that can be used in computer vision tasks like object recognition or 3D reconstruction. It is partly inspired by the SIFT descriptor. The standard version of SURF is several times faster than SIFT and claimed by its authors to be more robust against different image transformations than SIFT. SURF is based on sums of 2D Haar wavelet responses and makes an efficient use of integral images.
It uses an integer approximation to the determinant of Hessian blob detector, which can be computed extremely quickly with an integral image (3 integer operations). For features, it uses the sum of the Haar wavelet response around the point of interest. Again, these can be computed with the aid of the integral image.
An application of the algorithm is patented in the US.[1]
Contents |
Name | Language | Open Source |
Description |
---|---|---|---|
Original | C++ | No | Original implementation |
OpenSURF | C++, C# | Yes | Implementation with detailed documentation and reference paper. |
OpenSurfCL | C++ | Yes | Free implementation of OpenSURF on OpenCL. Wrappers for C# and Java. |
OpenCV SURF | C++ | Yes | Implementation of SURF feature extraction (OpenCV 2.0) |
SURFmex | Matlab | Matlab Interface (MEX) to OpenCV's SURF code. | |
OpenSURF Matlab | Matlab | Yes | Interface to OpenSURF for Matlab |
libmv SURF | C++ | Yes | Implementation of extraction and matching. |
Python mahotas | Python | computer vision package which includes an implementation of SURF. | |
Dlib C++ Library | C++ | Yes | Implementation of SURF feature extraction. |
Pan-o-matic | C++ | Yes | Software which includes an implementation of the SURF algorithm. |
Parallel SURF | C++ | Yes | Multi-threaded implementation based on Pan-o-matic. |
ProcessorSURF | C# | Yes | C# SURF plugin for Multi-Agent Serving System |
JavaSurf | Java | Yes | Java implementation of SURF |
JOpenSURF | Java | Yes | Java translation of OpenSURF |
ImageJ SURF | Java | Yes | SURF implementation as ImageJ plugin with a convenient GUI and output of statistics |
BoofCV | Java | Yes | Java computer vision library which includes SURF. |
Speeded Up SURF | Yes | GPU Implementation | |
CUDA SURF | C++ CUDA | Yes | GPU implementation using CUDA |
Mathematica | Mathematica | No | Mathematic implementation |
GPU SURF | No | GPU Implementation | |
FPGA SURF | Yes | FPGA Implementation | |
clsurf | C++ | High performance cross platform OpenCL implementation of SURF with nearest neighbors matching | |
IPOL | C++ | Yes | An implementation of SURF based on the original article with detailed explanations |